package team.nine.kuaichezuche.service;

import team.nine.kuaichezuche.model.VehicleInfo;

import java.util.List;
import java.util.Map;

/**
 * 车辆信息服务接口，定义车辆信息相关的业务方法
 */
public interface VehicleInfoService {

    /**
     * 创建车辆信息
     * @param vehicleInfo 车辆信息对象
     * @return 创建成功的车辆信息对象
     */
    VehicleInfo createVehicleInfo(VehicleInfo vehicleInfo);

    /**
     * 根据ID获取车辆信息
     * @param id 车辆信息ID
     * @return 车辆信息对象，如果不存在则返回null
     */
    VehicleInfo getVehicleInfoById(Integer id);

    /**
     * 根据品牌获取车辆信息列表
     * @param brand 品牌名称
     * @return 符合条件的车辆信息列表
     */
    List<VehicleInfo> getVehicleInfoByBrand(String brand);

    /**
     * 根据车型获取车辆信息列表
     * @param model 车型名称
     * @return 符合条件的车辆信息列表
     */
    List<VehicleInfo> getVehicleInfoByModel(String model);

    /**
     * 根据动力类型获取车辆信息列表
     * @param powerType 动力类型
     * @return 符合条件的车辆信息列表
     */
    List<VehicleInfo> getVehicleInfoByPowerType(VehicleInfo.PowerType powerType);

    /**
     * 根据品牌和车型获取车辆信息列表
     * @param brand 品牌名称
     * @param model 车型名称
     * @return 符合条件的车辆信息列表
     */
    List<VehicleInfo> getVehicleInfoByBrandAndModel(String brand, String model);

    /**
     * 更新车辆信息
     * @param vehicleInfo 包含更新信息的车辆信息对象
     * @return 更新后的车辆信息对象
     */
    VehicleInfo updateVehicleInfo(VehicleInfo vehicleInfo);

    /**
     * 删除车辆信息
     * @param id 车辆信息ID
     */
    void deleteVehicleInfo(Integer id);

    /**
     * 获取车辆信息列表（分页）
     * 返回包含车辆信息和车辆实例日租信息的数据
     * @param page 页码
     * @param pageSize 每页数量
     * @return 包含车辆信息和日租信息的Map列表
     */
    List<Map<String, Object>> getVehicleInfoList(Integer page, Integer pageSize);

    /**
     * 获取车辆信息总数
     * @return 车辆信息总数
     */
    int getVehicleInfoCount();
}